package cn.dlc.com.graph;


import cn.dlc.com.queue.Queue;
import lombok.Data;

/**
 * @author 邓立川
 * @date 2021/3/29 21:02
 * @desc 图
 */
@Data
public class Graph {

    private final int V; // 记录顶点数量
    private int E; //记录边数量
    // 邻接表 这个Queue是自己创建的queue
    private Queue<Integer>[] adj;

    public Graph(int V) {
        this.V = V;
        this.E = 0;
        // 初始话邻接表
        this.adj = new Queue[V];
        for (int i = 0; i < adj.length; i++) {
            // 初始化每一个队列。
            adj[i] = new Queue<>();
        }
    }

    // 获取顶点个数
    public int V() {
        return this.V;
    }

    // 获取边的数量
    public int E(){
        return this.E;
    }

    // 添加一条边
    public void addEdge(int v,int w) {
        // 1在无向图中边是没有方向的,所以该边既可以说是从v到w的边
        // 又可以说是从w到v的边·因此﹐需要i让w出现在v的领接表中
        // 并且还要让hv出现在w的邻接表中
        adj[v].enQueue(w);
        adj[w].enQueue(v);

        this.E++;
    }

    // 获取指定顶点的连接表
    public Queue<Integer> adj(int v) {
        return adj[v];
    }
}
